/*
 * @Description: element 组件
 * @Author: DHL
 * @Date: 2022-01-12 16:52:41
 * @LastEditors: DHL
 * @LastEditTime: 2022-05-23 15:25:56
 */
import type { App } from 'vue'

// vxe-table
import XEUtils from 'xe-utils'
import VXETable, { SizeType } from 'vxe-table'
import 'vxe-table/lib/style.css'
import { useAppStore } from '/@/store/modules/app'
import { useCacheData } from '/@/hooks/web/cacheData'
import { stringUtils } from '/@/utils/stringUtils'

export function setupVxePlugins(app: App<Element>) {
  app.use(VXETable, {
    size: useAppStore().getVxeSize, // 全局尺寸
    zIndex: 5000
  })
}

/**
 * 自定义全局的格式化处理函数
 */
VXETable.formats.mixin({
  // 格式化字典
  formatDict({ cellValue, row, column }) {
    const cacheData = useCacheData()
    const dicName: Nullable<string> = cacheData.getDicName(column.params.dict, cellValue)
    if (stringUtils.isNotEmpty(dicName)) {
      return dicName as string
    }
    return ''
  },
  // 格式化日期，默认 yyyy-MM-dd HH:mm:ss
  formatDate({ cellValue }, format) {
    return XEUtils.toDateString(cellValue, format || 'yyyy-MM-dd HH:mm:ss')
  },
  // 四舍五入金额，每隔3位逗号分隔，默认2位数
  formatAmount({ cellValue }, digits = 2) {
    return XEUtils.commafy(Number(cellValue), { digits })
  },
  // 格式化银行卡，默认每4位空格隔开
  formatBankcard({ cellValue }) {
    return XEUtils.commafy(XEUtils.toValueString(cellValue), { spaceNumber: 4, separator: ' ' })
  },
  // 四舍五入,默认两位数
  formatFixedNumber({ cellValue }, digits = 2) {
    return XEUtils.toFixed(XEUtils.round(cellValue, digits), digits)
  },
  // 向下舍入,默认两位数
  formatCutNumber({ cellValue }, digits = 2) {
    return XEUtils.toFixed(XEUtils.floor(cellValue, digits), digits)
  }
})
